home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / boot / netBoot.new / dev / zsreg.h < prev   
Text File  |  1990-12-19  |  9KB  |  208 lines

  1.  
  2. /*    @(#)zsreg.h 1.1 86/09/27 SMI    */
  3.  
  4. /*
  5.  * Copyright (c) 1986 by Sun Microsystems, Inc.
  6.  */
  7.  
  8. /*
  9.  * Zilog 8530 SCC Serial Communications Controller
  10.  *
  11.  * This is a dual uart chip with on-chip baud rate generators.
  12.  * It is about as brain-damaged as the typical modern uart chip,
  13.  * but it does have a lot of features as well as the usual lot of
  14.  * brain damage around addressing, write-onlyness, etc.
  15.  */
  16.  
  17. /*
  18.  * Uart registers:
  19.  *
  20.  * There are 16 write registers and 9 read registers in each channel.
  21.  * As usual, the two channels are ALMOST orthogonal, not exactly.  Most regs
  22.  * can only be written to, or read, but not both.  To access one, you must
  23.  * first write to register 0 with the number of the register you
  24.  * are interested in, then read/write the actual value, and hope that
  25.  * nobody interrupts you in between.
  26.  *
  27.  * Note that the register&bit assignment is suspiciously like the Intel 8274.
  28.  * Do you think they read each others' data sheets?  Can they decode them?
  29.  */
  30.  
  31. /* bits in RR0 */
  32. #define    ZSRR0_RX_READY        0x01    /* received character available */
  33. #define    ZSRR0_TIMER        0x02    /* if R15_TIMER, timer reached 0 */
  34. #define    ZSRR0_TX_READY        0x04    /* transmit buffer empty */
  35. #define    ZSRR0_CD        0x08    /* CD input (latched if R15_CD) */
  36. #define    ZSRR0_SYNC        0x10    /* SYNC input (latched if R15_SYNC) */
  37. #define    ZSRR0_CTS        0x20    /* CTS input (latched if R15_CTS) */
  38. #define    ZSRR0_TXUNDER        0x40    /* (SYNC) Xmitter underran */
  39. #define    ZSRR0_BREAK        0x80    /* received break detected */
  40.  
  41. /* bits in RR1 */
  42. #define    ZSRR1_ALL_SENT        0x01    /* all chars fully transmitted */
  43. #define    ZSRR1_PE        0x10    /* parity error (latched, must reset) */
  44. #define    ZSRR1_DO        0x20    /* data overrun (latched, must reset) */
  45. #define    ZSRR1_FE        0x40    /* framing error (not latched) */
  46.  
  47. /* bits in R/WR2 -- interrupt vector number. */
  48. /* NOTE that RR2 in channel A is unmodified, while in channel B it is
  49.    modified by the current status of the UARTs.  (This is independent
  50.    of the setting of WR9_VIS.)  If no interrupts are pending, the modified
  51.    status is Channel B Special Receive.  It can be written from
  52.    either channel. */
  53.  
  54. /* bits in RR3 -- Interrupt Pending flags for both channels (this reg can
  55.    only be read in Channel A, tho.  Thanks guys.) */
  56. #define    ZSRR3_IP_B_STAT        0x01    /* Ext/status int pending, chan B */
  57. #define    ZSRR3_IP_B_TX        0x02    /* Transmit int pending, chan B */
  58. #define    ZSRR3_IP_B_RX        0x04    /* Receive int pending, chan B */
  59. #define    ZSRR3_IP_A_STAT        0x08    /* Ditto for channel A */
  60. #define    ZSRR3_IP_A_TX        0x10
  61. #define    ZSRR3_IP_A_RX        0x20
  62.  
  63. /* bits in RR8 -- this is the same as reading the Data port */
  64.  
  65. /* bits in RR10 -- DPLL and SDLC Loop Mode status -- not entered*/
  66.  
  67. /*
  68.  * bits in R/WR12 -- lower byte of time constant for baud rate generator
  69.  * bits in R/WR13 -- upper byte of time constant for baud rate generator
  70.  *
  71.  * The following macro can be used to generate the baud rate generator's
  72.  * time constants.  The parameters are the input clock to the BRG (eg,
  73.  * 5000000 for 5MHz) and the desired baud rate.  This macro assumes that
  74.  * the clock needed is 16x the desired baud rate.
  75.  */
  76. #define    ZSTIMECONST(inputclock, baudrate) (( inputclock / (2*baudrate*16)) - 2)
  77.  
  78.  
  79. /* bits in R/WR15 -- interrupt enables for status conditions */
  80. #define    ZSR15_TIMER        0x02    /* ie if baud rate generator = 0 */
  81. #define    ZSR15_CD        0x08    /* ie transition on CD (car. det.) */
  82. #define    ZSR15_SYNC        0x10    /* ie transition on SYNC (gen purp) */
  83. #define    ZSR15_CTS        0x20    /* ie transition on CTS (clr to send) */
  84. #define    ZSR15_TX_UNDER        0x40    /* (SYNC) ie transmit underrun */
  85. #define    ZSR15_BREAK        0x80    /* ie on start, and end, of break */
  86.  
  87. /* Write register 0 -- common commands and Register Pointers */
  88. #define    ZSWR0_REG        0x0F    /* mask: next reg to read/write */
  89. #define    ZSWR0_RESET_STATUS    0x10    /* reset status bit latches */
  90. #define    ZSWR0_FIRST_RX        0x20    /* in WR1_RX_FIRST_IE, enab next int */
  91. #define    ZSWR0_RESET_TXINT    0x28    /* reset transmitter interrupt */
  92. #define    ZSWR0_RESET_ERRORS    0x30    /* reset read character errors */
  93. #define    ZSWR0_CLR_INTR        0x38    /* Reset Interrupt In Service */
  94.  
  95. /* bits in WR1 */
  96. #define    ZSWR1_SIE        0x01    /* status change master int enable */
  97.                     /* Also see R15 for individual enabs */
  98. #define    ZSWR1_TIE        0x02    /* transmitter interrupt enable */
  99. #define    ZSWR1_PARITY_SPECIAL    0x04    /* parity err causes special rx int */
  100. #define    ZSWR1_RX_FIRST_IE    0x08    /* r.i.e. on 1st char of msg */
  101. #define    ZSWR1_RIE        0x10    /* receiver interrupt enable */
  102. /* There are other Receive interrupt options defined, see data sheet. */
  103.  
  104. /* bits in WR2 are defined above as R/WR2. */
  105.  
  106. /* bits in WR3 */
  107. #define    ZSWR3_RX_ENABLE        0x01    /* receiver enable */
  108. #define    ZSWR3_AUTO_CD_CTS    0x20    /* auto-enable CD&CTS rcv&xmit ctl */
  109. #define    ZSWR3_RX_5        0x00    /* receive 5-bit characters */
  110. #define    ZSWR3_RX_6        0x80    /* receive 6 bit characters */
  111. #define    ZSWR3_RX_7        0x40    /* receive 7 bit characters */
  112. #define    ZSWR3_RX_8        0xC0    /* receive 8 bit characters */
  113.  
  114. /* bits in WR4 */
  115. #define    ZSWR4_PARITY_ENABLE    0x01    /* Gen/check parity bit */
  116. #define    ZSWR4_PARITY_EVEN    0x02    /* Gen/check even parity */
  117. #define    ZSWR4_1_STOP        0x04    /* 1 stop bit */
  118. #define    ZSWR4_1_5_STOP        0x08    /* 1.5 stop bits */
  119. #define    ZSWR4_2_STOP        0x0C    /* 2 stop bits */
  120. #define    ZSWR4_X1_CLK        0x00    /* clock is 1x */
  121. #define    ZSWR4_X16_CLK        0x40    /* clock is 16x */
  122. #define    ZSWR4_X32_CLK        0x80    /* clock is 32x */
  123. #define    ZSWR4_X64_CLK        0xC0    /* clock is 64x */
  124.  
  125. /* bits in WR5 */
  126. #define    ZSWR5_RTS        0x02    /* RTS output */
  127. #define    ZSWR5_TX_ENABLE        0x08    /* transmitter enable */
  128. #define    ZSWR5_BREAK        0x10    /* send break continuously */
  129. #define    ZSWR5_TX_5        0x00    /* transmit 5 bit chars or less */
  130. #define    ZSWR5_TX_6        0x40    /* transmit 6 bit characters */
  131. #define    ZSWR5_TX_7        0x20    /* transmit 7 bit characters */
  132. #define    ZSWR5_TX_8        0x60    /* transmit 8 bit characters */
  133. #define    ZSWR5_DTR        0x80    /* DTR output */
  134.  
  135. /* bits in WR6 -- Sync characters or SDLC address field. */
  136.  
  137. /* bits in WR7 -- Sync character or SDLC flag */
  138.  
  139. /* bits in WR8 -- transmit buffer.  Same as writing to data port. */
  140.  
  141. /* bits in WR9 -- Master interrupt control and reset.  Accessible thru
  142.    either channel, there's only one of them. */
  143. #define    ZSWR9_VECTOR_INCL_STAT    0x01    /* Include status bits in int vector */
  144. #define    ZSWR9_NO_VECTOR        0x02    /* Do not respond to int ack cycles */
  145. #define    ZSWR9_DIS_LOWER_CHAIN    0x04    /* Disable ints lower in daisy chain */
  146. #define    ZSWR9_MASTER_IE        0x08    /* Master interrupt enable */
  147. #define    ZSWR9_STAT_HIGH        0x10    /* Modify ivec bits 6-4, not 1-3 */
  148. #define    ZSWR9_RESET_CHAN_B    0x40    /* Reset just channel B */
  149. #define    ZSWR9_RESET_CHAN_A    0x80    /* Reset just channel A */
  150. #define    ZSWR9_RESET_WORLD    0xC0    /* Force hardware reset */
  151.  
  152. /* bits in WR10 -- SDLC, NRZI, FM control bits */
  153.  
  154. /* bits in WR11 -- clock mode control */
  155. #define    ZSWR11_TRXC_XTAL    0x00    /* TRxC output = xtal osc */
  156. #define    ZSWR11_TRXC_XMIT    0x01    /* TRxC output = xmitter clk */
  157. #define    ZSWR11_TRXC_BAUD    0x02    /* TRxC output = baud rate gen */
  158. #define    ZSWR11_TRXC_DPLL    0x03    /* TRxC output = Phase Locked Loop */
  159. #define    ZSWR11_TRXC_OUT_ENA    0x04    /* TRxC output enable (unless input) */
  160. #define    ZSWR11_TXCLK_RTXC    0x00    /* Tx clock is RTxC pin */
  161. #define    ZSWR11_TXCLK_TRXC    0x08    /* Tx clock is TRxC pin */
  162. #define    ZSWR11_TXCLK_BAUD    0x10    /* Tx clock is baud rate gen output */
  163. #define    ZSWR11_TXCLK_DPLL    0x18    /* Tx clock is Phase Locked Loop o/p */
  164. #define    ZSWR11_RXCLK_RTXC    0x00    /* Rx clock is RTxC pin */
  165. #define    ZSWR11_RXCLK_TRXC    0x20    /* Rx clock is TRxC pin */
  166. #define    ZSWR11_RXCLK_BAUD    0x40    /* Rx clock is baud rate gen output */
  167. #define    ZSWR11_RXCLK_DPLL    0x60    /* Rx clock is Phase Locked Loop o/p */
  168. #define    ZSWR11_RTXC_XTAL    0x80    /* RTxC uses crystal, not TTL signal */
  169.  
  170. /* bits in WR12 -- described above as R/WR12 */
  171.  
  172. /* bits in WR13 -- described above as R/WR13 */
  173.  
  174. /* bits in WR14 -- misc control bits, and DPLL control */
  175. #define    ZSWR14_BAUD_ENA        0x01    /* enables baud rate counter */
  176. #define    ZSWR14_BAUD_FROM_PCLK    0x02    /* Baud rate gen src = PCLK not RTxC */
  177. #define    ZSWR14_DTR_IS_REQUEST    0x04    /* Changes DTR line to DMA Request */
  178. #define    ZSWR14_AUTO_ECHO    0x08    /* Echoes RXD to TXD */
  179. #define    ZSWR14_LOCAL_LOOPBACK    0x10    /* Echoes TX to RX in chip */
  180. #define    ZSWR14_DPLL_NOP        0x00    /* These 8 commands are mut. exclu. */
  181. #define    ZSWR14_DPLL_SEARCH    0x20    /* Enter search mode in DPLL */
  182. #define    ZSWR14_DPLL_RESET    0x40    /* Reset missing clock in DPLL */
  183. #define    ZSWR14_DPLL_DISABLE    0x60    /* Disable DPLL */
  184. #define    ZSWR14_DPLL_SRC_BAUD    0x80    /* Source for DPLL is baud rate gen */
  185. #define    ZSWR14_DPLL_SRC_RTXC    0xA0    /* Source for DPLL is RTxC pin */
  186. #define    ZSWR14_DPLL_FM        0xC0    /* DPLL should run in FM mode */
  187. #define    ZSWR14_DPLL_NRZI    0xE0    /* DPLL should run in NRZI mode */
  188.  
  189. /* bits in WR15 -- described above as R/WR15 */
  190.  
  191. /*
  192.  * UART register addressing
  193.  *
  194.  * It would be nice if they used 4 address pins to address 15 registers,
  195.  * but they only used 1.  So you have to write to the control port then
  196.  * read or write it; the 2nd cycle is done to whatever register number
  197.  * you wrote in the first cycle.
  198.  *
  199.  * The data register can also be accessed as Read/Write register 8.
  200.  */
  201. struct zscc_device {
  202.     unsigned char    zscc_control;
  203.     unsigned char    :8;        /* Philler */
  204.     unsigned char    zscc_data;
  205.     unsigned char    :8;        /* Filler */
  206. };
  207.  
  208.